// 条款01：
// View C++ as a federation of languages.
// 视C++为一个语言联邦
#include <iostream>
using namespace std;

int main(){
    cout << "C++ is a multiparadigm programing language\n" << endl;

    cout << "C++是一个多重范型的编程语言，一个同时支持" << endl;
    cout << "过程形式(procedural)" << endl
         << "面向对象形式(object-oriented)" << endl
         << "函数形式(functional)" << endl
         << "泛型形式(generic)" << endl
         << "元编程形式(metaprogramming)" << endl;
    cout << "的语言。\n" << endl;

    cout << "视C++为一个由相关语言组成的联邦而非单一语言。" << endl;
    cout << "在其某个次语言(sublanguage)中，各种守则与通例都倾向简单、直观易懂、并且容易记住。" << endl;
    cout << "其主要的次语言总共有一下四个：" << endl;
    cout << "C：\n";
    cout << "    说到底C++仍是以C为基础。"
            "区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data types)、"
            "数组(arrays)、指针(pointers)等统统来自C。"
            "许多时候C++对问题的解法其实不过就是较高级的C解法，但当你以C++内的C成分工作时，"
            "高效编程守则映照出C语言的局限："
            "没有模板(templates)，没有异常(exceptions)，没有重载(overloading)......" << endl;
    cout << "Object-Oriented C++：\n";
    cout << "    这部分也就是C with Classes所诉求的：classes(包括构造函数和析构函数)，"
            "封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual函数(动态绑定)......等等。"
            "这一部分是面向对象设计之古典守则在C++上的最直接实施。" << endl;
    cout << "Template C++：\n";
    cout << "    这是C++的范型编程(generic programming)部分，也是大多数程序员经验最少的部分。"
            "Template相关考虑与设计已经弥漫整个C++，良好编程守则中“唯template适用”的特殊条款并不罕见。"
            "实际上由于templates威力强大，它们带来崭新的编程范型(programming paradigm)，"
            "也就是所谓的template metaprogramming(TMP，模板元编程)。"
            "但除非你是template激进团队的中坚骨干，大可不必担心这些。"
            "TMP相关规则很少与C++主流编程互相影响。" << endl;
    cout << "STL：\n";
    cout << "    STL是个template程序库，看名称也知道，但它是非常特殊的一个。"
            "它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象(function objects)"
            "的规约有极佳的紧密配合与协调，然而templates及程序库也可以其他想法建置出来。"
            "STL有自己特殊的办事方式，当你伙同STL一起工作，你必须遵守他的规约。" << endl;

    return 0;
}